#ifndef UI_H_INCLUDED
#define UI_H_INCLUDED

#define KEY_ESC     27
#define ENTER       10
#ifdef __linux__
#include <ncurses.h>
#define ALT_X KEY_ESC
#define BACKSPACE   KEY_BACKSPACE
#else
#include "../include/curses.h"
#define BACKSPACE   8
#endif
#include <time.h>
#include "../bd/bd.h"
#include "../util/util.h"

#define A_ATTR  (A_ATTRIBUTES ^ A_COLOR)
#define COLOR_TITULO       1
#define COLOR_MENU_PRINCIPAL    (2 | A_BOLD)
#define COLOR_MENU_PRINCIPAL_SEL  (3 | A_BOLD | A_REVERSE )
#define COLOR_SUB_MENU     (4 | A_BOLD)
#define COLOR_SUB_MENU_SEL  5
#define COLOR_CUERPO        6
#define COLOR_BARRA_ESTADO   7
#define INPUTBOXCOLOR    8
#define EDITBOXCOLOR     9
#define COLOR_ERROR      10
#define COLOR_PREG       11
#define COLOR_ETIQ       12

typedef struct
{
    char *nombre; //nombre del menu
    void (*func)(void); // puntero a la funcion del menu
    char *descr; //descripcion del menu
    int req;
} menu;

void inicializar();
void iniciar_menu(menu *mp,int tipo_usuario);
void menu_principal(menu *mp);
void fijar_pos_menu(int y, int x);
void obt_pos_menu(int *y, int *x);
void dimen_menu(menu *mp, int *nmenus, int *maxcarac);
void dimen_smenu(menu *mp, int *nmenus, int *maxcarac);
void titulo(char * tipo,char *nombre);
void setear_color(WINDOW *win, chtype color);
void msg_cuerpo(char *msg);
void msg_estado(char *msg);
void mostrar_menu(menu *mp);
void act_menu(WINDOW *wmenu, menu *mp);
char *padstr(char *s, int length);
char *prepad(char *s, int length);
void act_menu_principal(int *ancho, menu *mp);
void caja_color(WINDOW *win, chtype color, int hasbox);
WINDOW *ventana_principal(void);
char ** obtener_datos(char *preg[],char *desc,int largo_max,int pass);
char ** obtener_mod_datos(char *preg[],char *resp[],char * desc,int largo_max,int pass);
menu *menu_mod(menu * mp);
void finalizar(void);
int preg_error(char * msg,int tipo);
char * lafecha(int fecha, int hora);
void salir(int si);
WINDOW * obt_win_cuerpo(void);

#endif // UI_H_INCLUDED
